package com.itheima_04;

import java.lang.reflect.Array;

public class MethodDemo_01 {
    public static void main(String[] args) {
        int num = 10;
        System.out.println("调用前：" + num);   //调用前num：10
        /*
            方法参数传递为基本类型，即传入方法中的参数是具体的数值
        */
        //  调用前num:10，调用后num:10 → 基本数据类型的参数，形参的改变不影响实参。
        //  每个方法在栈内存中，都会有独立的栈空间，方法运行结束后会弹栈消失。
        int change = change(num);//实参num：基本类型
        System.out.println("调用后：" + num);   //调用后num：10
        System.out.println(change);

        System.out.println("--------------------");

        /*
            对于引用类型的参数（传入方法中的参数是内存地址），形式参数的改变影响实际参数的值。
        */
        //  引用数据类型的传参，传入的是地址值，内存中会造成两个引用指向同一个内存的效果，
        //   所以即使方法弹栈，堆内存中的数据也已经是改变后的结果。
        int[] arr = {1, 2};
        int[] arr2 = change(arr);
        System.out.println(arr[0]);     //2
        System.out.println(arr2[0]);    //2



    }

    private static int[] change(int[] arr) {
        arr[0] = 2;
        return arr;
    }

    private static int change(int num) {        //形参 int num：基本类型
        return num = 20;
    }
}
